package main

import (
	//"google.golang.org/grpc/internal/status"
	"fmt"
	"google.golang.org/grpc/status"
)

type Status = status.Status

type Demo interface {
	GRPCStatus() *Status // 这里使用 "google.golang.org/grpc/internal/status"  type Status = status.Status 的别名
}

func main() {
	// 总结就是 这里的 status.Error 结构体 实现 Error 方法 所以可以判断为是 Error 类型
	// status.Error 结构体 封装的 status.Status 结构体  而我们需要的就是这个 结构体的数据
	// 这里的代码 不是自己敲出来的  是根据 深层次的代码查看 截图部分代码实现而成
	err := status.New(200, "msg").Err() // 这里返回的 status.Error 结构体   这里 Error 结构体继承 status.Status结构体
	if se, ok := err.(Demo); ok {       // 判断 status.Error 是否 有 GRPCStatus()
		st := se.GRPCStatus() // 返回 status.Status 结构体
		fmt.Println(st)
		fmt.Println(st.Message())
		fmt.Println(st.Code())
	}
}
